package com.ws.overwrite;
/*
方法的重写（override / overwrite）
1.重写：子类继承父类以后，可以对父类中同名同参数的方法，进行覆盖操作
2.应用：重写以后，当创建子类对象以后，通过子类对象调用子父类中的同名同参数
的方法时，实际执行的是子类重写父类的方法
3.重写的规定：
    方法的声明：权限修饰符 返回值类型 方法名(形参列表) throws 异常的类型 {
                    //方法体
                }
    约定俗称：子类中的叫重写的方法，父类中的叫被重写的方法
    ① 子类重写的方法的方法名和形参列表与父类被重写的方法的方法名和形参列表相同
    ② 子类的重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符
        特殊情况：子类不能重写父类中声明为 private权限的方法
    ③ 返回值类型：
           > 父类被重写的方法的返回值类型是 void，则子类重写的方法的返回值类型只能是 void
           > 父类被重写的方法的返回值类型是 A 类型，则子类重写的方法的返回值可以是 A 类型或 A 类的子类
           > 父类被重写的方法的返回值类型是基本数据类型，则子类重写的方法的返回值类型必须是相同的基本数据类型
    ④ 子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型
************************************************************888
    子类和父类中的同名同参数的方法要么都声明为非 static 的（考虑重写），要么都声明为 static 的（不是重写）



面试题：区分方法的重载和重写
重载：相同的方法名不同的参数列表
重写：子类继承父类中的方法，对父类中同名同参数的方法进行覆盖
 */
public class PersonTest {

    public static void main(String[] args) {

        Student student = new Student("计算机科学与技术");

        student.eat();
        student.walk(10);
        student.study();

        student.info();

        Person person = new Person();
        person.eat();

    }
}
